import { app, BrowserWindow, ipcMain } from 'electron'
import path from 'path'
import { fileURLToPath } from 'url'
// import dotenv from 'dotenv'

// 禁用GPU进程沙箱以解决WebGL问题
app.commandLine.appendSwitch('disable-gpu-process-crash-limit')
app.commandLine.appendSwitch('ignore-gpu-blocklist')
app.commandLine.appendSwitch('enable-gpu-rasterization')
app.commandLine.appendSwitch('enable-zero-copy')
app.commandLine.appendSwitch('enable-webgl')
app.commandLine.appendSwitch('enable-accelerated-2d-canvas')
app.disableHardwareAcceleration = false

// dotenv.config(); // 加载.env文件
const __filename = fileURLToPath(import.meta.url)
const __dirname = path.dirname(__filename)

// 保持对window对象的全局引用，避免JavaScript对象被垃圾回收时，窗口自动关闭
let mainWindow

async function createWindow() {
  // 创建浏览器窗口
  mainWindow = new BrowserWindow({
    width: 1400,
    height: 900,
    resizable: true,
    minWidth: 800,
    minHeight: 600,
    backgroundColor: '#212334', // 设置窗口背景颜色
    icon: path.join(__dirname, '../public/icon.ico'), // 设置应用图标
    titleBarStyle: process.platform === 'darwin' ? 'hiddenInset' : 'default', // macOS使用隐藏式标题栏
    titleBarOverlay: process.platform === 'win32' ? {
      color: '#11142C', // Windows标题栏背景颜色
      symbolColor: '#FFFFFF', // Windows标题栏按钮颜色
    } : false, // 只在Windows上启用标题栏覆盖
    frame: true, // 显示窗口边框
    autoHideMenuBar: true, // 自动隐藏菜单栏（Windows上）
    webPreferences: {
      // 禁用安全沙箱
      sandbox: false,
      // 允许加载远程资源
      webSecurity: false,
      nodeIntegration: true,
      contextIsolation: true,
      preload: path.join(__dirname, 'preload.cjs'),
      // 添加媒体访问权限
      allowRunningInsecureContent: false,
      enableWebSQL: false,
      enableRemoteModule: false,
      // 启用WebGL和硬件加速
      webgl: true,
      experimentalFeatures: true,
      // 启用摄像头和麦克风访问
      permissions: {
        media: true
      }
    }
  })

  // 为Windows平台设置额外的窗口特性
  if (process.platform === 'win32') {
    // 尝试应用深色模式（需要Windows 10或更高版本）
    try {
      mainWindow.setBackgroundColor('#11142C')
      // 隐藏默认菜单
      mainWindow.setMenuBarVisibility(false)
    } catch (e) {
      console.error('设置Windows窗口样式时出错:', e)
    }
  }

  // 判断是开发环境还是生产环境
  const isDev = process.env.NODE_ENV === 'development'
  
  if (isDev) {
    // 开发环境加载Vite开发服务器的URL
    mainWindow.loadURL('http://localhost:5173')
    // 打开开发者工具
    mainWindow.webContents.openDevTools()
  } else {
    // 生产环境加载打包后的index.html文件
    console.log('Production mode - loading index.html')
    console.log('__dirname:', __dirname)
    console.log('process.resourcesPath:', process.resourcesPath)
    console.log('process.cwd():', process.cwd())
    
    // 尝试多个可能的路径
    const possiblePaths = [
      // 开发时的路径
      path.join(__dirname, '../dist/index.html'),
      // 打包后可能的路径
      path.join(process.resourcesPath, 'dist/index.html'),
      path.join(process.resourcesPath, 'app/dist/index.html'),
      // ASAR 包内的路径
      path.join(__dirname, '../dist/index.html'),
      // 备用路径
      path.join(process.cwd(), 'dist/index.html')
    ]
    
    let loaded = false
    for (const tryPath of possiblePaths) {
      try {
        console.log('Trying to load from:', tryPath)
        await mainWindow.loadFile(tryPath)
        console.log('✓ Successfully loaded from:', tryPath)
        loaded = true
        break
      } catch (err) {
        console.log('✗ Failed to load from:', tryPath, '-', err.message)
      }
    }
    
    if (!loaded) {
      console.error('❌ Failed to load index.html from any path')
      // 作为最后的尝试，显示错误页面
      mainWindow.loadURL('data:text/html,<h1>应用加载失败</h1><p>无法找到应用文件，请重新安装应用。</p>')
    }
  }

  // 添加快捷键支持，在生产环境中也能打开开发者工具进行调试
  mainWindow.webContents.on('before-input-event', (event, input) => {
    // F12 或 Ctrl+Shift+I 打开/关闭开发者工具
    if (input.key === 'F12' || 
        (input.control && input.shift && input.key === 'I')) {
      if (mainWindow.webContents.isDevToolsOpened()) {
        mainWindow.webContents.closeDevTools()
      } else {
        mainWindow.webContents.openDevTools()
      }
    }
    // Ctrl+R 或 F5 刷新页面
    if ((input.control && input.key === 'r') || input.key === 'F5') {
      mainWindow.webContents.reload()
    }
  })

  // 设置媒体访问权限处理
  mainWindow.webContents.session.setPermissionRequestHandler((webContents, permission, callback) => {
    // 允许媒体设备权限请求
    if (permission === 'media' || 
        permission === 'microphone' || 
        permission === 'camera' || 
        permission === 'mediaKeySystem' ||
        permission === 'fullscreen') {
      callback(true)
      return
    }
    
    // 其他权限请求默认拒绝
    callback(false)
  })

  // 窗口关闭时触发
  mainWindow.on('closed', function () {
    mainWindow = null
  })
}

// Electron初始化完成并准备创建浏览器窗口时调用此方法
app.whenReady().then(createWindow)

// 所有窗口关闭时退出应用
app.on('window-all-closed', function () {
  // 在macOS上，除非用户用Cmd + Q确定地退出
  // 否则绝大部分应用及其菜单栏会保持激活
  if (process.platform !== 'darwin') app.quit()
})

app.on('activate', function () {
  // 在macOS上，当单击dock图标并且没有其他窗口打开时，
  // 通常在应用程序中重新创建一个窗口
  if (mainWindow === null) createWindow()
})

// 处理来自渲染进程的消息
ipcMain.on('message-from-renderer', (event, message) => {
  console.log('收到渲染进程消息:', message)
  
  // 延迟1秒后回复消息
  setTimeout(() => {
    if (mainWindow && !mainWindow.isDestroyed()) {
      mainWindow.webContents.send('message-from-main', '这是主进程的回复')
    }
  }, 1000)
})

// 窗口控制事件处理
ipcMain.on('window-minimize', () => {
  if (mainWindow) mainWindow.minimize()
})

ipcMain.on('window-maximize', () => {
  if (mainWindow) {
    if (mainWindow.isMaximized()) {
      mainWindow.unmaximize()
    } else {
      mainWindow.maximize()
    }
  }
})

ipcMain.on('window-close', () => {
  if (mainWindow) mainWindow.close()
})